#ifndef SYMBOLES_H_
#define SYMBOLES_H_


//revoir les noms des enums -> il faut pas de redondance avec les token de parse.y
static int cmpt_val=1;

enum nom_type {FCT,ST,DOUBLE,I,BOOL,CLAS,UNDEF};

struct arg{
  char* nom_arg;
  enum nom_type ty_arg;
  struct arg* suivant;
};

struct params{
  struct arg* arg1;
  enum nom_type retour;
};

struct fct{
  char* nom_fct;
  struct fct* suivant;
};

struct type{
  enum nom_type ntype;
  struct fct* class_fcts;
  struct params* fct_params;
  union{
    int vali;
    int valb;
    char* valst;
    double vald;
  };
};

struct variable{
  char* nom_var;
  int numvar;
  struct type* tvar;
  struct variable* suivant;

};

struct variable* ajouter_var(struct variable** t,struct type* ty,char* id);
void ajouter_arg(struct variable* f,char* id,enum nom_type ty);
void ajouter_fct(struct variable* classe,char* f);
enum nom_type type(struct variable* t,char* id);
void liberer_table(struct variable* t);
void liberer_type(struct type* ty);
void liberer_fct(struct fct* f);
void liberer_arg(struct arg* a);
#endif
